﻿
namespace MoneyBook.Web.Models {
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;
    using MoneyBook.Web.Assets.Resources;


    // MetadataTypeAttribute は、Item クラスの追加メタデータを含む
    //クラスとして ItemMetadata を識別します。
    [MetadataTypeAttribute(typeof(Item.ItemMetadata))]
    public partial class Item {

        // このクラスを使用すると、Item クラスのプロパティにカスタムの
        //属性を追加できます。
        //
        // たとえば、次の例は Xyz プロパティを
        //必須プロパティに設定し、有効な値の形式を指定します:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ItemMetadata {

            // メタデータ クラスはインスタンス化するためのものではありません。
            private ItemMetadata() {
            }

            [Display(Name = "Abstract", ResourceType = typeof(Strings))]
            public string Abstract { get; set; }

            public Account Account { get; set; }

            public int AccountId { get; set; }

            [Display(Name="Category", ResourceType=typeof(Strings))]
            [Include]
            public Category Category { get; set; }

            [Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(Strings))]
            public int CategoryId { get; set; }

            [Display(Name = "Expense", ResourceType = typeof(Strings))]
            [Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(Strings))]
            public decimal Expense { get; set; }

            public int ItemId { get; set; }

            [Display(Name = "PurchaseDate", ResourceType = typeof(Strings))]
            [Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(Strings))]
            public DateTime PurchaseDate { get; set; }
        }
    }
}
